package com.dingding.order.service;

import com.dingding.common.core.base.dto.FacadeResult;
import com.dingding.common.core.base.dto.ResponseEntity;
import com.dingding.order.dto.phonecall.ReqGetPhoneCall;
import com.dingding.order.dto.phonecall.ResGetPhoneCall;
import com.dingding.order.dto.publish.taxi.ReqPublishOrderByTaxi;
import com.dingding.order.dto.publish.taxi.ResPublishOrderByTaxi;

/**
 * @ClassName: IUserOrderFacade
 * @Description: 用户订单服务接口
 * @author YHQ
 * @date 2016年6月2日 下午6:47:05
 */
public interface IUserOrderFacade {

	/**
	 * 
	 * @Title: releaseOrder
	 * @Description: 发布订单
	 * @author YHQ
	 * 
	 */
	public String releaseOrder(String requestData);

	/**
	 * 
	 * @Title: userGrabOrder
	 * @Description: 用户抢单
	 * @author YHQ
	 * 
	 */
	public String userGrabOrder(String requestData);

	/**
	 * 
	 * @Title: taxiGrabOrder
	 * @Description: 出租车抢单
	 * @author YHQ
	 * @return String 返回类型
	 * @version V2.3.0
	 * 
	 */
	public String taxiGrabOrder(String requestData);

	/**
	 * 
	 * @Description:乘客支付
	 * @author fengshuonan
	 * 
	 */
	public String orderPay(String requestData);

	/**
	 * 
	 * 出租车订单线上支付
	 * 
	 * @Title: taxiOrderpay 
	 * @author CHEHAUNBO
	 * @since V2.3.0
	 * 
	 */
	public String taxiOrderOnLinePay(String requestData);
	
	/**
	 * 
	 * 出租车订单线上支付
	 * 
	 * @Title: taxiOrderpay 
	 * @author CHEHAUNBO
	 * @since V2.3.0
	 * 
	 */
	public String taxiOrderOnLinePayV2(String requestData);

	/**
	 * 
	 * @Description:出租车乘客线下支付
	 * @author CHEHUANBO
	 * @since V2.3.0 
	 * 
	 */
	public String taxiOrderLinePay(String requestData);
	
	/**
	 * 
	 * @Description:出租车乘客线下支付
	 * @author CHEHUANBO
	 * @since V2.3.0 
	 * 
	 */
	public String taxiOrderLinePayV2(String requestData);
	

	/**
	 * 
	 * 出租车订单，第三方平台支付成功后，更改订单状态
	 * 
	 * @Title: taxiOrderPayNotify 
	 * @param taxiOrderId 出租车订单ID
	 * @return boolean true 成功 false 失败
	 * @author CHEHAUNBO
	 * 
	 */
	public boolean taxiOrderPayNotify(String taxiOrderId);

	/**
	 * 
	 * @Title: calculateDistance
	 * @Description:计算距离价格
	 * @author zhouxuan
	 * 
	 */
	public String calculateDistance(String requestData);

	/**
	 * 
	 * @Title: taxiCalculateDistance
	 * @Description:出租车计算距离
	 * @author zhouxuan
	 * 
	 */
	public String taxiCalculateDistance(String requestData);

	/**
	 * 
	 * @Title: specialCalculateDistance 
	 * @Description: 专车计算距离价格
	 * @param requestData 客户端请求参数
	 * @author YHQ 
	 * @since V2.4.0
	 * @return String    返回类型
	 * 
	 */
	public String specialCalculateDistance(String requestData);
	
	/**
	 * 
	 * @Title: getNearOrderList
	 * @Description: 获取附近订单列表
	 * @author zhoxuan
	 * 
	 */
	public String getNearOrderList(String requestData);

	/**
	 * @Title: taxiGetNearbyOrderList
	 * @Description:出租车获取附近订单列表
	 * @author zhouxuan
	 * @since V2.3.0
	 */
	public String taxiGetNearbyOrderList(String requestData);

	/**
	 * @Description: 确认到达请求bean
	 * @param confirmArriveReqDTO
	 * @author fengshuonan
	 * @return String
	 */
	public String confirmArrive(String requestData);

	/**
	 * 
	 * @Description: 确认到达请求bean
	 * @param confirmArriveReqDTO
	 * @author YHQ
	 * @return String
	 * 
	 */
	public String taxiConfirmArrive(String requestData);

	/**
	 * 
	 * @Description: 取消订单请求bean
	 * @param confirmArriveReqDTO
	 * @author CHEHUANBO
	 * @return String
	 * 
	 */
	public String cancelOrder(String requestData);

	/**
	 * 
	 * @Description: 取消订单请求bean
	 * @param taxiCancelOrder
	 * @author YHQ
	 * @return String
	 * 
	 */
	public String taxiCancelOrder(String requestData);

	/**
	 * 
	 * @Title: autoConfirmArrive
	 * @Description: 自动确认到达
	 * @author YHQ
	 * @return void 返回类型
	 * 
	 */
	public void autoConfirmArrive();

	/**
	 * 
	 * @Title: autoCancelOrder
	 * @Description: 自动取消订单
	 * @author YHQ
	 * @return void 返回类型
	 * 
	 */
	public void autoCancelOrder();

	/**
	 * 
	 * @Title: autoCancelTaxiOrder
	 * @Description: 自动取消出租车订单
	 * @author YHQ
	 * @since V2.3.0
	 * @return void 返回类型
	 * 
	 */
	public void autoCancelTaxiOrder();
	
	/**
	 * 
	 * @Title: autoCancelSpecialOrder 
	 * @Description:自动取消专车订单 
	 * @author SUNZHICHENG  
	 * @date  2016年9月6日 上午9:30:46
	 * @since v2.4.0
	 */
	public void autoCancelSpecialOrder();
	

	/**
	 * @Description: 发布出租车订单
	 * @author fengshuonan
	 * @return void
	 */
	@Deprecated
	public String publishTaxiOrder(String requestData);

	/**
	 * 
	 * @Title: publishOrderByTaxi 
	 * @Description: 发布出租车订单
	 * @param reqPublishOrderByTaxi 客户端请求参数
	 * @author YHQ 
	 * @since V2.5.6
	 * @return ResponseEntity<ResPublishOrderByTaxi>    返回类型
	 */
	public ResponseEntity<ResPublishOrderByTaxi> publishOrderByTaxi(ReqPublishOrderByTaxi reqPublishOrderByTaxi);
	
	/**
	 * @Title: getMyOrder
	 * @Description:我的订单
	 * @author zhouxuan
	 * @since V2.3.0
	 */
	public String getMyOrder(String requestData);

	/**
	 * @Title: getHistoryOrder
	 * @Description:历史订单
	 * @author YHQ
	 * @since V2.5.0
	 */
	public String getHistoryOrder(String requestData);
	
	/**
	 * @Title: getHistoryOrderDetail
	 * @Description:历史订单详情
	 * @author YHQ
	 * @since V2.5.0
	 */
	public String getHistoryOrderDetail(String requestData);
	
	/**
	 * @Description: 获取订单状态(常规订单)
	 * @param orderId 订单id
	 * @author fengshuonan
	 * @return Integer 订单状态  1:待抢单  2:待支付  3:已支付  4:已完成  5:已取消
	 * @since 2.3.0
	 */
	public Integer getUserOrderStatus(String orderId);

	/**
	 * @Description:获取订单状态(出租车订单)
	 * @param orderId 订单id
	 * @author fengshuonan
	 * @return Integer 订单状态   1：待抢单  2：服务中 3：待支付 4：已完成 5：已取消
	 * @since 2.3.0
	 */
	public Integer getTaxiUserOrderStatus(String orderId);
	
	
	/**
	 * @Description: 去支付接口
	 * @author fengshuonan
	 * @since 2.3.0
	 */
	public String goToPay(String requestData);

	/**
	 * 
	 * @Title: queryPayResult 
	 * @Description: 查询支付结果的状态
	 * @param requestData 客户端请求参数
	 * @author YHQ 
	 * @since V2.3.0
	 * @return String    返回类型
	 * 
	 */
	public String queryPayResult(String requestData);
	
	/**
	 * @Description:同步订单接口
	 * @author fengshuonan
	 * @return void
	 * @since 2.3.2
	 */
	public void syncOrder();
	
	/**
	 * @Description: 发布专车订单
	 * @author YHQ
	 * @since V2.4.0
	 * @return void
	 */
	public String publishSpecialOrder(String requestData);
	
	/**
	 * 
	 * @Description: 取消专车订单请求bean
	 * @param specialCancelOrder
	 * @author YHQ
	 * @return String
	 * 
	 */
	public String specialCancelOrder(String requestData);
	
	/**
	 * @Description:获取被拨打的号码
	 * @param reqGetPhoneCall
	 * @author fengshuonan
	 * @return FacadeResult<ResGetPhoneCall>
	 * @since 2.4
	 */
	public FacadeResult<ResGetPhoneCall> getPhoneCall(ReqGetPhoneCall reqGetPhoneCall);
	
}
